// color4.cpp: implementation of the color4 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "color4.h"
#include <math.h>


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

color4::color4()
{
	memset(m_color,0,sizeof(m_color));
	m_color[3]=1.0f;
}

COLORREF color4::GetRGB() const
{
	BYTE r=(BYTE)m_color[0]*255;
	BYTE g=(BYTE)m_color[1]*255;
	BYTE b=(BYTE)m_color[2]*255;
	return RGB(r,g,b);
}

void color4::invert_a()
{
	m_color[3]=1-m_color[3];
}

color4::color4(float r, float g, float b, float a)
{
	m_color[0]=r;
	m_color[1]=g;
	m_color[2]=b;
	m_color[3]=a;
}


color4& color4::Set(float r, float g, float b)
{
	m_color[0]=r;
	m_color[1]=g;
	m_color[2]=b;
	m_color[3]=1.0f;
	return *this;
}

color4& color4::Set(float *v4)
{
	memcpy(m_color,v4,12);
	return *this;
}

BOOL color4::operator !=(const color4 &color)const
{
	const float e=1.0e-5f;
	if(fabs(m_color[0]-color.m_color[0])>e)return TRUE;
	if(fabs(m_color[1]-color.m_color[1])>e)return TRUE;
	if(fabs(m_color[2]-color.m_color[2])>e)return TRUE;
	if(fabs(m_color[3]-color.m_color[3])>e)return TRUE;
	return FALSE;
}

color4::color4(COLORREF rgb)
{
	m_color[0]=GetRValue(rgb)/255.0f;
	m_color[1]=GetGValue(rgb)/255.0f;
	m_color[2]=GetBValue(rgb)/255.0f;
	m_color[3]=1.0f;
}

float& color4::operator[]( int i )
{
	return m_color[i];
}

const float& color4::operator[]( int i ) const
{
	return m_color[i];
}